<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>代码中的继承：B继承了A的属性和方法，A和B都有这些属性和方法，不是转移而是多了一份。</p>
    <!-- 
        A是字符串 B是数组 string有toLowercase方法 arr没有  也想要所有的数组都想要这个方法
        arr.toxxx() = func...  这是加给某一个数组
        如果希望所有的数组都有这个功能 此时就要对Array构造函数或者原型对象修改
        Array.prototype.fn = (){函数}  
        Array.prototype.fn = String.prototype.toLowercase()
     -->
    <script>
        function GaoBW() {
            this.car = '兰博基尼';
            this.house = '外滩十八号';
        }

        function Father(n, a) {
            this.name = n;
            this.age = a;
        }

        // 放在new之前修改Father 实例化之后再修改 就来不及了
        Father.prototype = new GaoBW()
        // Father的原型对象 = GaoBW的实例对象
        // GaoBW的实例对象中有房有车 Father的原型对象中名字和年龄，这4个值写完之后 都可以给实例传递

        Father.prototype.constructor = Father; // 纠正指向

        // 通过new实例化 得到一个儿子的实例
        var son1 = new Father('沈万三', 28);
        var son2 = new Father('朱陶公', 38);
        console.log(son1, son2);
        // 继承链紊乱  Father的实例最终指向了隔壁高百万  son1.constructor 返回的是GaoBW
    </script>
</body>
</html>